package cn.tedu.oop;

import java.util.InputMismatchException;
import java.util.Scanner;

/**本类用作异常的入门案例*/
public class ExceptionDemo {
    public static void main(String[] args) {
//        method1();//调用暴露异常的方法
//        method2();//调用解决异常的方案1----捕获处理--自己解决
        f();
//        method3();//调用解决异常的方案2----向上抛出--别人解决

    }

    private static void f() {
        try{
                method3();
                }catch(Exception e){
            System.out.println("输入的数据不对");
        }
    }

   /**如果一个方法抛出了异常，那么谁来调用这个方法，谁就需要处理这个异常
    * 这里的处理也有两种方法：捕获解决 或者 继续向上抛出
    * 但注意：我们一般会在main()调用之前将异常解决掉
    * 而不是将问题抛给main()，因为没人解决了该报错还是报错*/
    /**异常抛出的格式：在方法的小括号与大括号之间，写throws 异常类型
     * 如果有多个异常，使用逗号分隔即可*/
//    private static void method3() throws ArithmeticException,InputMismatchException{
        private static void method3() throws Exception{//两种写法都可以
        //1.复写之前可能会抛出异常的代码
        System.out.println("请您输入要计算的第1个整数：");
        int a=new Scanner(System.in).nextInt();
        System.out.println("请您输入要计算的第2个整数：");
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);

    }

    /**异常捕获处理的格式：
     * try{
     *     可能会抛出异常的代码
     * }catch(预先设想到的异常类型 异常名){
     *     万一捕获到了异常，进行处理的解决方案
     * }
     * try-catch结构可以嵌套，如果有多种异常类型需要特殊处理的话*/
    private static void method2() {
        //1.按照捕获处理的结构完成代码
        try{
            //2.复写刚刚的业务代码
            System.out.println("请您输入要计算的第1个整数：");
            int a=new Scanner(System.in).nextInt();
            System.out.println("请您输入要计算的第2个整数：");
            int b=new Scanner(System.in).nextInt();
            System.out.println(a/b);

        }catch(ArithmeticException e){//异常类型 一场名
            System.out.println("除数不能为0！");
        }catch(InputMismatchException e) {//异常类型 一场名
            System.out.println("请输入规定的整数！");
            /**使用多态的思想，不论是什么子异常，统一看作父类型Exception
             * 做出更加通用的解决方案，甚至可以只写1个，上面2个不写了*/
        }catch(Exception e){
            System.out.println("您输入的数据不对，请重新输入");
        }

    }

    private static void method1() {
        //1.提示并接受用户输入的两个整数
        System.out.println("请您输入要计算的第1个整数：");
        int a=new Scanner(System.in).nextInt();
        System.out.println("请您输入要计算的第2个整数：");
        int b=new Scanner(System.in).nextInt();
        //2.输出a b做除法的结果
        System.out.println(a/b);
        //输入：10和0，报错：ArithmeticException----算术异常，除数不能为0，数学规定
        //输入：11和3.4，报错：InputMismatchException----输入不匹配异常
        /**1.不要害怕BUG，真正的勇士敢于直面自己写的BUG
         * 2.学会看报错的信息提示，确定自己的错误的反向
         * 3.学会看报错的行号提示，确定自己报错的位置，哪里不对点哪里
         *    注意：源码不会错，要看自己写的代码*/


    }
}
